python解决非线性方程 |
您所在的位置:网站首页 › sympy 解方程组 › python解决非线性方程 |
注意:我的观点挂在你y = P * x Q sqrt(S * x T)的原始方程上. 我将使用y = P * x Q x * x *(S * x T)只是为了能够演示同情解算器的工作原理(当它工作时). 战略: >将y表示为其他变量(x,P,Q,S,T)的函数 >区分你 >使用已知常数(0,c,y(0),y(c),y'(0),y'(c))设置4个方程式 >使用sympy解决 >打印每种可能的解决方案(如果有的话) 码: # Set up variables and equations x, y, P, Q, S, T, = sympy.symbols('x y P Q S T') c, y_0, y_c, dy_0, dy_c = sympy.symbols('c y_0 y_c dy_0 dy_c') eq_y = P * x + Q + x * x * (S * x + T) eq_dy = eq_y.diff(x) # Set up simultaneous equations that sympy will solve equations = [ (y_0 - eq_y).subs(x, 0), (dy_0 - eq_dy).subs(x, 0), (y_c - eq_y).subs(x, c), (dy_c - eq_dy).subs(x, c) ] # Solve it for P, Q, S and T solution_set = sympy.solve(equations, P, Q, S, T, set = True) # Extract names, individual solutions and print everything names = solution_set[0] solutions = list(solution_set[1]) for k in range(len(solutions)): print('Solution #%d' % (k+1)) for k2, name in enumerate(names): print('\t%s: %s' % (name, solutions[k][k2]) ) 输出: Solution #1 P: dy_0 Q: y_0 S: (c*(dy_0 + dy_c) + 2*y_0 - 2*y_c)/c**3 T: (-c*(2*dy_0 + dy_c) - 3*y_0 + 3*y_c)/c**2 您现在可以使用这些解决方案中的一个并执行另一个.subs(…)来将y作为一个纯粹由常量和x组成的函数. 至于你原来的等式…我想知道是否有人应该提交一个错误报告,以便他们可以改进它…… 🙂 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |